![]() |
|
|||||
Datenbank benutzenuse firma;
Datenbank löschendrop database firma;
Datenbanken allgemeinNachdem die Datenbank firma mit create database erzeugt wurde, kann man später den MySQL-Monitor auch mit mysql firma starten. Die genannte Datenbank ist dann bereits in Benutzung. Bei den Namen von Datenbanken, Tabellen und Feldern sollte man darauf achten, dass keine deutschen Umlaute, scharfes ß, Leerzeichen und Sonderzeichen verwendet werden. Innerhalb von MySQL kann mit einem umfangreichen und detaillierten System zur Zugriffssicherung gearbeitet werden. Verschiedenen Benutzern können spezifische Rechte eingeräumt bzw. verwehrt werden. Zum Erlernen des ersten Umgangs mit Datenbanken und der Datenbank-Programmierung wird hier vereinfacht angenommen, daß die Benutzer sämtliche Zugriffsrechte bei der Benutzung von Datenbanken haben. E.2.2 Tabelle erzeugen
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Feldname | Datentyp | Bedeutung des Datentyps |
| name | char(30) | Zeichenkette der Länge 30 |
| vorname | char(25) | Zeichenkette der Länge 25 |
| personalnummer | int | ganze Zahlen (im Bereich von -2 147 483 648 bis 2 147 483 647) |
| gehalt | double(10,2) | Zahlen mit Nachkommastellen, maximale Breite der Anzeige ist 10, die Zahl ist auf zwei Nachkommastellen genau |
| geburtstag | date | Datumsangaben |
Bei diesem Beispiel wurden einige häufig verwendete Datentypen eingesetzt, die für viele Anwendungen bereits ausreichen. Zum Einsatz weiterer Datentypen und Feldeigenschaften wird an dieser Stelle auf das Manual zu MySQL (auf der CD) verwiesen.
Beim Löschen von Datensätzen werden die betroffenen Datensätze nur als »gelöscht« markiert, aber nicht physikalisch gelöscht. Die Tabelle und damit die Datenbank wird durch neue Einträge ständig größer. Hier kann die Anweisung optimize table Abhilfe schaffen. Dadurch werden alle Datensätze, die als »gelöscht« markiert sind, auch physikalisch gelöscht. Die Datenbank kann somit spürbar verkleinert werden. Für die o. a. Tabelle würde die Anweisung lauten:
optimize table personen;
Eine gesamte Tabelle inkl. aller Datensätze kann mit Hilfe von drop table gelöscht werden. Für die o. a. Tabelle würde die Anweisung lauten:
drop table personen;
| Dieser Befehl sollte nur in Ausnahmefällen angewendet werden! |
Sollte man feststellen, dass eine Tabelle mit einer nicht ausreichenden oder falschen Struktur erzeugt wurde, so kann diese Struktur mit Hilfe der SQL-Anweisung alter table geändert werden. Je nach Änderung können Verluste bei den bereits eingegebenen Daten auftreten. Darauf wird gesondert hingewiesen. Einige Beispiele:
alter table personen rename adr;
Der Name der Tabelle personen wird in adr geändert.
alter table personen change vorname vname char(25);
Der Name des Feldes vorname in der Tabelle personen wird auf vname geändert. Dieses Feld hat den Datentyp char(25), ohne Angabe des Datentyps kann die Änderung nicht durchgeführt werden.
alter table personen change vorname vorname char(35);
| Die Länge des Feldes vorname in der Tabelle personen wird auf 35 Zeichen geändert (vorher 25). Der Feldname muß doppelt angegeben werden. Bei einer Verkleinerung (z. B. von 25 auf 15 Zeichen) können Daten verloren gehen! |
alter table personen add gehalt double;
Das Feld gehalt vom Typ double wird der Tabelle personen hinzugefügt.
alter table personen change gehalt gehalt int;
| Der Typ des Feldes gehalt aus der Tabelle personen wird auf int geändert (vorher double). Der Feldname muß doppelt angegeben werden. Bei einer Veränderung des Typs können Daten verloren gehen (hier sind dies die Nachkommastellen)! |
alter table personen drop gehalt;
| Das Feld gehalt der Tabelle personen wird gelöscht. In allen Datensätzen gehen die Daten dieses Feldes verloren! |
Falls man nicht weiß, welche Datenbanken und Tabellen bereits existieren bzw. wie eine Tabelle aufgebaut ist, dann kann man auf die SQL-Anweisung show zurückgreifen. Einige Beispiele:
show databases;
alle Datenbanken innerhalb von MySQL anzeigen
show tables from firma;
alle Tabellen der Datenbank firma anzeigen
show columns from personen from firma;
alle Felder der Tabelle personen der Datenbank firma anzeigen. Der optionale Zusatz from database (hier from firma) kann weggelassen werden, falls eine Datenbank schon zur Benutzung geöffnet wurde (z. B. mit use).
Nehmen wir an, die Struktur der Tabelle personen entspräche dem Original, das mit create table erzeugt wurde (s. oben). Ein neuer, vollständiger Datensatz für diese Tabelle mit den Feldern name, vorname, personalnummer, gehalt und geburtstag kann dann wie folgt erzeugt werden:
insert personen values ( 'Maier', 'Hans', 21398, 2850.90, '1960-12-20' );
Dabei ist Folgendes zu beachten:
| Die Reihenfolge der Feldinhalte in den Klammern hinter values muss der Reihenfolge der erzeugten Felder entsprechen. |
| Zeichenketten und Datumsangaben müssen in einfache Hochkommata (Apostroph) gesetzt werden. |
| Die Datumsangabe muss im amerikanischen Format erfolgen (JJJJ-MM-TT). |
| Bei Zahlen mit Nachkommastellen ist ein Punkt statt eines Kommas zu verwenden (wie bei PHP). |
Falls nicht alle Feldinhalte besetzt werden sollen oder die Original-Reihenfolge der Felder nicht beachtet werden soll, kann man auch folgende Form benutzen:
insert personen ( name, gehalt ) values ( 'Schmitz', 3950.90 );
Dabei erfolgt eine genaue Zuordnung der neuen Werte zu den genannten Feldern. Die Felder vorname, personalnummer und geburtstag bleiben zunächst leer. Sie sind mit NULL besetzt und können später noch gefüllt werden. NULL bedeutet weder die Zahl 0 noch eine leere Zeichenkette, sondern lediglich »kein Eintrag"!
Die SQL-Anweisung select wird mit Abstand am häufigsten verwendet und dient zur Durchführung einer Datenbank-Abfrage. Es findet eine Auswahl von Datensätzen, die angezeigt werden sollen, statt. Einige Anwendungsbeispiele:
select * from personen; Alle Felder (*) und alle Datensätze der Tabelle personen werden angezeigt. select name, vorname from personen; Die Inhalte der Felder name und vorname aller Datensätze der Tabelle personen werden angezeigt. select * from personenErstellen Sie eine Datenbank für Computer-Hardware. Innerhalb dieser Datenbank soll es eine Tabelle für Festplatten mit folgendem Aufbau und Inhalt geben:
| Hersteller | Typ | MB | Preis | Artikel-nummer | Datum der ersten Produktion |
| Quantum | Fireball CX | 6400 | 215,00 | HDA-208 | 1.10.97 |
| Quantum | Fireball Plus | 9100 | 269,00 | HDA-163 | 15.3.98 |
| Fujitsu | MPE 3136 | 13600 | 275,00 | HDA-171 | 1.9.98 |
| Seagate | 310232A | 10200 | 245,00 | HDA-144 | 15.11.97 |
| IBM | DJNA 372200 | 22000 | 455,00 | HDA-140 | 15.6.98 |
| Installieren Sie MySQL (falls noch nicht geschehen). |
| Starten Sie den MySQL-Datenbank-Server. |
| Rufen Sie den MySQL-Monitor auf. |
| Verwenden Sie create database zum Erzeugen der Datenbank. |
| Wechseln Sie zu dieser Datenbank mit use. |
| Erzeugen Sie mit create table eine Tabelle mit sechs Feldern eines geeigneten Typs. |
| Geben Sie mit insert den ersten Datensatz ein. |
| Kontrollieren Sie mit select die korrekte Eingabe der Struktur und des ersten Datensatzes. |
| Nehmen Sie gegebenenfalls mit alter table Änderungen an der Struktur vor. |
| Geben Sie die restlichen Datensätze mit insert ein. |
| Kontrollieren Sie mit select die korrekte Eingabe der gesamten Tabelle. |
| Beenden Sie den MySQL-Monitor. |
| Fahren Sie den MySQL-Datenbank-Server wieder herunter. |
Sollten Sie Fehler bei der Eingabe der Datensätze gemacht haben, so können Sie diese später noch verändern oder löschen.
Bei der Auswahl durch where innerhalb der select-Anweisung (und später auch in anderen Anweisungen) können, ähnlich wie bei der Programmierung mit PHP, die nachfolgenden Vergleichs-Operatoren angewendet werden:
| Operator | Bedeutung |
| = | gleich |
| <> | ungleich |
| > | größer als |
| >= | größer als oder gleich |
| < | kleiner als |
| <= | kleiner als oder gleich |
Es können auch mehrere Auswahlbedingungen logisch miteinander verknüpft werden, und zwar mit Hilfe der folgenden logischen Operatoren:
| Operator | Bedeutung |
| not | Der Wahrheitswert einer Bedingung wird umgekehrt. |
| and | Alle Bedingungen müssen zutreffen. |
| or | Eine der Bedingungen muss zutreffen. |
Es folgt ein Beispiel für die Anwendung von Vergleichsoperatoren und logischen Operatoren. Die nachfolgende Auswahl ergibt alle Datensätze, bei denen im Feld gehalt ein Wert zwischen 3000 und 3500 steht:
select * from personen where gehalt >= 3000 and gehalt <= 3500;
Der Operator like ist sehr nützlich beim Suchen nach Zeichenketten oder Teilen von Zeichenketten. Dabei können auch Platzhalter (Wildcards) eingesetzt werden. Ein % (Prozentzeichen) steht für eine beliebige Anzahl von unbekannten Zeichen, ein _ (Unterstrich) steht für genau ein unbekanntes Zeichen. Die untersuchte Zeichenkette muss dabei nach wie vor in einfache Hochkommata gesetzt werden. Einige Beispiele:
select * from fpZusätzlich läßt sich die Reihenfolge der Ausgabe mit Hilfe von order by beeinflussen. Die folgende SQL-Anweisung sortiert die Ausgabe nach Gehalt, beginnend mit dem größten Gehalt:
select * from personen order by gehalt desc;
Der Zusatz desc steht für descending (=absteigend). Im Normalfall wird aufsteigend sortiert, der Zusatz asc für ascending (=aufsteigend) muss deshalb nicht gesondert erwähnt werden.
Führen Sie zu der Hardware-Datenbank, die mit der vorherigen Übung erzeugt wurde, verschiedene Abfragen durch. Es sollen alle Festplatten angezeigt werden, die folgende Kriterien erfüllen:
| des Herstellers Quantum, mit allen Angaben |
| mit einer Kapazität von mehr als 10 000 MB, nur mit den Angaben Hersteller, Typ, MB |
| mit einem Preis von weniger als 300 DM, nur mit den Angaben Hersteller, Preis, Artikelnummer, nach Preis aufsteigend sortiert |
| mit einer Kapazität von mehr als 10 000 MB, die weniger als 300 DM kosten, mit allen Angaben, nach MB absteigend sortiert |
| deren Typbezeichnung mit »Fire« beginnt, mit allen Angaben |
| in deren Typbezeichnung »CX« vorkommt, mit allen Angaben |
| die nach dem 1.1.98 erstmalig produziert wurden, mit allen Angaben |
| die im ersten Halbjahr 1998 erstmalig produziert wurden, mit allen Angaben |
Die SQL-Anweisung update dient zur Änderung von einem oder mehreren Feldinhalten in einem oder mehreren vorhandenen Datensätzen. Sie ähnelt vom Aufbau her der select-Anweisung. Man sollte unbedingt darauf achten, dass die Auswahlkriterien sorgfältig gewählt werden, da ansonsten evtl. nicht nur die gewünschten Datensätze verändert werden. Einige Beispiele:
Die SQL-Anweisung delete dient zum Löschen von einem oder mehreren vorhandenen Datensätzen. Sie ähnelt ebenfalls vom Aufbau her der select-Anweisung und sollte sehr umsichtig eingesetzt werden, da ansonsten evtl. nicht nur die gewünschten Datensätze gelöscht werden. Nachdem z. B. zu einem früheren Zeitpunkt mit der folgenden Anweisung ein Datensatz eingefügt wurde:
insert fp ( hersteller, typ, artnummer ) values ( 'Western Digital', 'WD-102AA', 'HDA-178' );
könnte dieser Datensatz wieder gelöscht mit:
delete from fp where artnummer = 'HDA-178';
Es empfiehlt sich, dabei ein möglichst eindeutiges Kriterium zu verwenden, da ansonsten nicht nur die gewünschten Datensätze gelöscht werden. Im vorliegenden Falle ist dies die Artikelnummer.
Falls man unvollständige oder leere Datensätze einer Tabelle hinzugefügt hat, so kann man sie z. B. mit folgender Anweisung löschen:
delete from fp where hersteller is null;
Diese Anweisung löscht alle Datensätze, die keinen Eintrag im Feld hersteller haben.
Führen Sie in der Hardware-Datenbank aus den vorherigen Übungen folgende Änderungen bzw. Löschungen durch:
| Alle Festplatten des Herstellers Seagate sollen um 25 DM teurer werden. |
| Der Hersteller Fujitsu hat seine Festplatte MPE 3136 ersetzt durch die Festplatte MPE 3139 mit einer Kapazität von 13900 MB. Führen Sie die notwendige Änderung durch. |
| Alle Festplatten des Herstellers Quantum sollen um 8 % teurer werden. |
| Der Hersteller IBM hat seine Produktion eingestellt. Entfernen Sie die betreffenden Festplatten aus Ihrem Angebot. |
| Löschen Sie alle versehentlich eingetragenen Datensätze. Das Kriterium für einen solchen Datensatz soll sein: Der Datensatz hat keine Artikelnummer. |
Zur Kontrolle: Nach den Änderungen auf der Basis der Originaldaten (siehe erste Übung) sollte die Datenbank folgendes Aussehen haben:
| Hersteller | Typ | MB | Preis | Artikel-nummer | Datum der ersten Produktion |
| Quantum | Fireball CX | 6400 | 232,20 | HDA-208 | 1.10.97 |
| Quantum | Fireball Plus | 9100 | 290,52 | HDA-163 | 15.3.98 |
| Fujitsu | MPE 3139 | 13900 | 275,00 | HDA-171 | 1.9.98 |
| Seagate | 310232A | 10200 | 270,00 | HDA-144 | 15.11.97 |
Für viele Vorgänge innerhalb von Tabellen ist eine eindeutige Identifizierung der einzelnen Datensätze hilfreich und notwendig. Dies wird mit Hilfe eines sogenannten »eindeutigen Index« realisiert. Dieser Index kann unmittelbar beim Erzeugen einer neuen Tabelle geschaffen werden (mit create table).
Er kann aber auch einer vorhandenen Tabelle, die bereits Daten beinhaltet, hinzugefügt werden (mit alter table). Es empfiehlt sich allerdings, sich bereits vor Erzeugung der Tabelle zu überlegen, welches Feld eindeutige Daten beinhaltet, und die Tabelle mit eindeutigem Index zu erzeugen.
Die Erzeugung einer Tabelle mit einem eindeutigen Index wird an folgendem Beispiel gezeigt:
create table p ( nachname char(30), nummer int not null, index (nummer), unique (nummer) );
Diese SQL-Anweisung erzeugt eine Tabelle mit dem Namen p und den zwei Feldern nachname und nummer. Das Feld nummer ist vom Typ int (für ganze Zahlen). Neue Datensätze müssen für dieses Feld einen Eintrag erhalten, dies ist mit dem Zusatz not null festgelegt worden. Dieser Zusatz ist für den Index notwendig.
Mit index (nummer) wird ein Index auf dem Feld nummer erzeugt. Der Index bekommt auch den Namen nummer und wird mit unique (nummer) zu einem eindeutigen Index.
Anschließend können in dieser Tabelle nur noch Einträge aufgenommen werden, die einen Eintrag im Feld nummer haben. Dieser Eintrag darf nicht bereits in einem anderen Datensatz existieren, da ansonsten die Eindeutigkeit verletzt wäre. Alle Datensätze können anhand des Wertes im Feld nummer eindeutig voneinander unterschieden werden. Dies ist besonders beim Ändern und Löschen von Datensätzen wichtig.
Mit Hilfe der Anweisung show columns from p; kann man sich die Struktur der Tabelle anschauen. Beim Feld nummer ist in der Spalte Key der Eintrag PRI zu sehen. Dies bedeutet, daß für diese Spalte der Primary Key erzeugt wurde. Der Primary Key ist ein eindeutiger Index.
Einer vorhandenen Tabelle kann ein Index hinzugefügt werden. Dazu sind mehrere Schritte notwendig. Nehmen wir an, die Tabelle wäre mit der folgenden SQL-Anweisung erzeugt worden:
create table p ( nachname char(30), nummer int );
Zunächst muß das Feld nummer nachträglich auf die Eigenschaft not null geändert werden. Dabei sollte vorher darauf geachtet werden, daß in keinem der vorhandenen Datensätze ein leerer Eintrag im Feld nummer existiert, ansonsten treten Fehler bei der Veränderung der Feldeigenschaften auf. Die SQL-Anweisung für diese Änderung lautet:
alter table p change nummer nummer int not null;
Anschließend kann ein eindeutiger Index für das Feld nummer erzeugt werden. Darüber hinaus sollte darauf geachtet werden, daß im Feld nummer kein Eintrag mehr als einmal existiert, ansonsten wird der eindeutige Index nicht erzeugt. Die SQL-Anweisung für die Änderung lautet:
alter table p add unique (nummer);
Man sollte sich mit Hilfe von show columns from p; davon überzeugen, daß der Primary Key für das Feld nummer existiert.
Sollte man versehentlich das falsche Feld für einen eindeutigen Index gewählt haben, so lässt er sich mit der folgenden SQL-Anweisung wieder entfernen (für o. a. Beispiel):
alter table p drop primary key;
Falls man darüber hinaus für dieses Feld auch leere Einträge erlauben möchte, muss die betreffende Feld-Eigenschaft noch geändert werden:
alter table p change nummer nummer int null;
Erzeugen Sie für die Tabelle personen in der Datenbank firma einen eindeutigen Index auf dem Feld personalnummer. Lassen Sie sich vorher alle Datensätze anzeigen, und nehmen Sie gegebenenfalls notwendige Änderungen bezüglich der Inhalte des Feldes personalnummer vor.
Überzeugen Sie sich anschließend davon, dass der eindeutige Index erzeugt wurde: Versuchen Sie einen Datensatz einzutragen, der einen bereits vorhandenen Eintrag im Feld personalnummer hat.
Erzeugen Sie für die Tabelle fp in der Datenbank hardware einen eindeutigen Index auf dem Feld artnummer. Lassen Sie sich vorher alle Datensätze anzeigen, und nehmen Sie gegebenenfalls notwendige Änderungen bezüglich der Inhalte des Feldes artnummer vor.
Überzeugen Sie sich anschließend davon, dass der eindeutige Index erzeugt wurde: Versuchen Sie einen Datensatz einzutragen, der einen bereits vorhandenen Eintrag im Feld artnummer hat.
Ein nützliches Hilfsmittel zur übersichtlichen Administration von umfangreicheren Datenbanken ist das Programm PHPMyAdmin von Tobias Ratschiller. Es steht unter der Adresse http://www.phpwizard.net/phpMyAdmin als Freeware-Tool zur Verfügung.
Auf der CD befindet sich WinMySQL, ein visuelles Tool zur Durchführung von SELECT-Abfragen von Alexandre Gouverneur.
Im vorliegenden Abschnitt werden eine ganze Reihe von Befehlen für MySQL eingesetzt. Zur besseren Übersicht schließt sich eine Liste aller Befehle mit einer kurzen Erläuterung derselben an. Weitergehende Ausführungen finden sich im MySQL-Manual.
| Funktionsname | Erläuterung |
| alter table | Ändern der Struktur einer Tabelle |
| create database | Erzeugen einer Datenbank |
| create function | Erzeugen einer benutzerdefinierten Funktion |
| create index | Erzeugen eines Index in einer Tabelle |
| create table | Erzeugen einer Tabelle |
| delete | Löschen von Datensätzen |
| describe | zeigt das Ergebnis, das eine Auswahl mit select erzeugen würde (s. explain) |
| drop database | Löschen einer Datenbank |
| drop function | Löschen einer benutzerdefinierten Funktion |
| drop index | Löschen eines Index in einer Tabelle |
| drop table | Löschen einer Tabelle |
| explain | zeigt das Ergebnis, das eine Auswahl mit select erzeugen würde (s. describe) |
| flush | Löschen von MySQL-internen Caches |
| grant | Vergabe von Benutzerrechten innerhalb einer Datenbank |
| insert | Erzeugen von neuen Datensätzen |
| join | dient zur Auswahl von Datensätzen aus mehreren Tabellen mit select |
| kill | Löschen eines Threads, in dem eine MySQL-Verbindung aktiv ist |
| load data | Erzeugen von neuen Datensätzen durch Einlesen aus einer Textdatei |
| lock tables | Sperren von Tabellen im aktiven Thread |
| optimize table | Optimieren einer Tabelle, Freigabe von nicht mehr genutztem Speicherplatz |